#!/usr/bin/ash

# Reseteamos
chown root testf_root
chown root testd_root
chown root testp_root
chown root testn_root
chown root testf_root2
chown root testd_root2

chmod 700 testf_root
chmod 700 testd_root
chmod 700 testp_root
chmod 700 testn_root
chmod 666 testf_root2
chmod 777 testd_root2

acl_clr testf_root
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi
acl_clr testd_root
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi
acl_clr testp_root
if [ $? -eq 5 ]; then echo "OK"; else echo "ERROR!"; fi
acl_clr testn_root
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi
acl_clr testf_root2
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi
acl_clr testd_root2
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi


chown ast testf_ast
chown ast testd_ast
chown ast testp_ast
chown ast testn_ast

chmod 700 testf_ast
chmod 700 testd_ast
chmod 700 testp_ast
chmod 700 testn_ast

acl_clr testf_ast
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi
acl_clr testd_ast
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi
acl_clr testp_ast
if [ $? -eq 5 ]; then echo "OK"; else echo "ERROR!"; fi
acl_clr testn_ast
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

###############################
# Linea de comandos invalida  #
###############################

# faltan argumentos
acl_set testf_root
if [ $? -eq 33 ]; then echo "OK"; else echo "ERROR!"; fi

# permisos invalidos
acl_set testf_root ast 111
if [ $? -eq 34 ]; then echo "OK"; else echo "ERROR!"; fi

acl_set testf_root ast 1010101
if [ $? -eq 34 ]; then echo "OK"; else echo "ERROR!"; fi

# usuario invalido
acl_set testf_root 0 111000
if [ $? -eq 31 ]; then echo "OK"; else echo "ERROR!"; fi

acl_set testf_root juancito 111000
if [ $? -eq 31 ]; then echo "OK"; else echo "ERROR!"; fi

# ruta demasiado larga
acl_set 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 ast 111000
if [ $? -eq 32 ]; then echo "OK"; else echo "ERROR!"; fi

########################
# Parametros invalidos #
########################

# archivo inexistente
acl_set testf_ro ast 111000
if [ $? -eq 3 ]; then echo "OK"; else echo "ERROR!"; fi

# acl llena
cc -o fill_acl fill_acl.c
./fill_acl
acl_set testf_root ast 111000
if [ $? -eq 30 ]; then echo "OK"; else echo "ERROR!"; fi
acl_clr testf_root
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

# acceso a acl inexistente
acl_get testf_root
if [ $? -eq 10 ]; then echo "OK"; else echo "ERROR!"; fi

acl_get testn_root
if [ $? -eq 10 ]; then echo "OK"; else echo "ERROR!"; fi

acl_get testd_root
if [ $? -eq 10 ]; then echo "OK"; else echo "ERROR!"; fi

#################
# Casos validos #
#################

# doy permisos de lectura o escritura sobre archivos de root a ast
acl_set testf_root ast 110000
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

acl_set testd_root ast 101000
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

acl_set testf_root bin 111000
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

# quito permisos de lectura o escritura sobre archivos de root a ast
acl_set testf_root2 ast 000111
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

acl_set testd_root2 ast 000111
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

# accedo a una acl existente
acl_get testf_root
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

# borro una linea de la ACL
acl_del testf_root bin
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

#######################
# Archivos especiales #
#######################

# archivo invalido (pipe)
acl_set testp_root ast 111000
if [ $? -eq 5 ]; then echo "OK"; else echo "ERROR!"; fi

# archivo de bloques
acl_set testn_root ast 111000
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

acl_del testn_root ast
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi

acl_clr testn_root
if [ $? -eq 0 ]; then echo "OK"; else echo "ERROR!"; fi



echo
echo "---------------------------------------------------------------------------"
echo "Tests finalizados! Para proseguir, ejecute tests_ast.sh como el usuario ast"
echo "---------------------------------------------------------------------------"
